package core.collection.mycollection;

import core.collection.bean.Student;

import java.util.ArrayList;
import java.util.Collection;

/**
 * 集合的由来及集合继承体系图
 * Collection集合的基本功能测试
 *
 * 1、集合的由来
 * 数组长度是固定的，添加元素超过数组长度时候需要重新定义
 *
 * 2、数组和集合的区别
 *      数组既可以存储基本数据类型，又可以存储引用数据类型
 *      集合只能存储引用数据类型
 *      (基本数据类型存储的是值，引用数据类型存储的是地址值)
 *      集合存储基本数据类型的时候会自动装箱
 *
 *      数组长度是固定的，不能自动增长
 *      集合长度是可变的，可以根据元素的增加而增长
 *
 * 3、数组和集合什么时候使用
 *      如果元素个数是固定的，推荐用数组，否则用集合
 *
 * 4、集合继承体系图
 *      Coolection(单列集合的根接口)
 *          List有序(存和取的顺序一致)，有索引，可以存储重复值
 *              ArrayList 数组实现
 *              LinkedList 链表实现
 *              Vector 数组实现
 *
 *          Set无序(存和取的顺序不一致)，无索引，不可以存储重复值
 *              HashSet 哈希算法
 *              TreeSet 二叉树算法
 *
 * @author
 * @create 2018-12-22 15:16
 **/
public class mycollection_2_Collection {
    public static void main(String[] args){
        demo_contains();
    }

    public static void demo_contains(){
        Collection list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");

        System.out.println(list.contains("b"));
    }

    public static void demo_clear(){
        Collection list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");

        list.clear();
        System.out.println(list);
    }

    public static void demo_remove(){
        Collection list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");

        list.remove("b");
        System.out.println(list);
    }

    public static void demo_add(){
        Collection list = new ArrayList();
        //父类引用指向子类对象

        boolean b1 = list.add("abc");
        boolean b2 = list.add(true);
        //自动装箱new Boolean(true)
        boolean b3 = list.add(100);
        boolean b4 = list.add(new Student("test",23));
        boolean b5 = list.add("abc");

        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);
        System.out.println(b4);
        System.out.println(b5);
        //打印都是true
        //list是存和取一致的，有索引，可以存储重复的元素，所以源码中也是一直返回true的
        //set存储重复时返回false

        System.out.println(list);
        //list的父类的父类已经重写了Object的toString
    }
}
